import math  # Python math 模块提供了许多对浮点数的数学运算函数。
import cmath  # Python cmath 模块包含了一些用于复数运算的函数。
import operator
import random

'''
cmath 模块的函数跟 math 模块函数基本一致，区别是 cmath 模块运算的是复数，math 模块运算的是数学运算。
'''

n = 30
print('=' * n, '数字内置函数', '\n')
a = 1000000000000000000  # 长整型不需要定义, int类型溢出后会自动转换
print(a)
print('长整型定义', '-' * n, '\n')

# 内置函数
v1 = -5
v2 = 6.123
print(abs(v1))  # 绝对值
print(math.fabs(v1))  # 绝对值(返回浮点型)
print('绝对值', '-' * n, '\n')

print(round(v2, 2))  # 四舍五入, 精度
print(math.ceil(v2))  # 向上取整
print(math.floor(v2))  # 向下取整
print('精度', '-' * n, '\n')

# python3中已经不使用cmp函数进行判断了
print(operator.eq(80, 100))
print(operator.lt(80, 100))
print(operator.le(80, 100))
print(operator.gt(80, 100))
print(operator.ge(80, 100))
print(operator.ne(80, 100))

# 最大最小值, 支持序列
print(max(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
print(min(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

print('比较大小', '-' * n, '\n')

# exp() 方法返回x的指数, e的x次方, e为自然对数
print(math.exp(1))

# 对数函数(返回浮点型)
print(math.log(10, 100))
print(math.log10(100))
print(math.log2(16))
print(math.log1p(50))
print('对数函数', '-' * n, '\n')

# 以元组的形式返回一个数字的整数和小数部分, 第一位为小数, 第二位为整数
print(math.modf(100.12))
print(math.modf(100.17))
print(math.modf(100))
print(math.modf(math.pi))
print('分解整数和小数', '-' * n, '\n')

# 指数运算
print(pow(2, 3))  # 2**3的值
print(math.sqrt(4))  # 平方根
print('指数运算', '-' * n, '\n')

# 指数运算
print(pow(2, 3))  # 2**3的值
print(math.sqrt(4))  # 平方根
print('指数运算', '-' * n, '\n')

# 随机数
randomList = range(10)
# 从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1
v4 = random.randrange(1, 5, 1)  # 接收三个参数, 开始, 接收, 步长
print(v4)
v4 = random.choice(randomList)  # 方法返回一个列表，元组或字符串中随机一项。
print(v4)
v4 = random.random()
print(v4)

lists = [12, 5, 23, 8, 90, 45]
tuple2 = (12, 5, 23, 8, 90, 45)
random.shuffle(lists)  # 该方法没有返回值, 改变的是原列表, 元组不可变
print(tuple2)

for i in range(1, 10):
    print(random.uniform(1, 6))

# 三角函数略略略略略略略略略略略略略略略略略略略略略略略略

print('随机数', '-' * n, '\n')

# math依赖
# b = dir(math)
# print(b)
# b = dir(cmath)
# print(b)
# print('math依赖', '-' * n, '\n')

# python末尾必须以空行结尾
